package com.lanou3g.code0423;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * Created by dllo on 18/4/23.
 */
//UDP 模拟TCP的过程,让发送方接收接收方回发的数据
//智能家电之间的连接用的是UDP协议,因为在同一个局域网,用的同一个路由器
public class ReceiveClient {
    public static void main(String[] args) {

        try {

            //UDP 协议使用DatagramSocket
            //ds对象可以用来接收/发送数据,准备接收数据的时候,需要在构造方法中指定一个固定端口号
            //如果没有指定端口号,那么会随机绑定到一个端口号,这时发送方就会不知道向哪个端口发数据

            DatagramSocket ds = new DatagramSocket(7788);
            byte[] buf = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buf,buf.length);
            ds.receive(packet);

            String data = new String(packet.getData(),0,packet.getLength());
            System.out.println(data);
           // ds.close();

            //datagramSocket 多大是确定以的,不然丢了就丢了,所以UDP一般用于传递小而频繁的对数组要求比较高的数据,不适合传递大数据
            String data1 = new String(packet.getData(),0,packet.getLength());
            System.out.println(data);

            byte[] d = "我收到了".getBytes();
            packet.getAddress(); // 从发送方获取发送地址
            packet.getPort(); //获取端口号

            System.out.println(packet.getAddress());
            System.out.println(packet.getPort());

            DatagramPacket re = new DatagramPacket(d,d.length,packet.getAddress(),packet.getPort());
            ds.send(re);  //会发给发送方
            System.out.println(re.getPort());


            ds.close();





        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}
